//
// #define _CRT_SECURE_NO_WARNINGS 1
//class Solution {
//public:
//    int sum(vector<int>& nums)
//    {
//        int ret = 0;
//        for (auto e : nums)
//            ret += e;
//        return ret;
//    }
//
//    int minOperations(vector<int>& nums, int x) {
//        int target = sum(nums) - x, sum = 0, len = -1;
//        if (target < 0) return -1;
//
//        for (int left = 0, right = 0; right < nums.size(); right++)
//        {
//            sum += nums[right];
//            while (sum > target) sum -= nums[left++];
//            if (sum == target) len = max(len, right - left + 1);
//        }
//        if (len == -1) return -1;
//        else return nums.size() - len;
//    }
//};


//class Solution {
//public:
//    int totalFruit(vector<int>& fruits) {
//        unordered_map<int, int> map;
//        int ret = 0;
//        for (int left = 0, right = 0; right < fruits.size(); right++)
//        {
//            map[fruits[right]]++;
//            while (map.size() > 2)
//            {
//                map[fruits[left]]--;
//                if (map[fruits[left]] == 0)
//                    map.erase(fruits[left]);
//                left++;
//            }
//            ret = max(ret, right - left + 1);
//        }
//        return ret;
//    }
//};

//class Solution {
//public:
//    int totalFruit(vector<int>& fruits) {
//        // unordered_map<int, int> map;
//        int map[100005] = { 0 };
//        int ret = 0;
//        for (int left = 0, right = 0, kinds = 0; right < fruits.size(); right++)
//        {
//            if (map[fruits[right]] == 0) kinds++;
//            map[fruits[right]]++;
//            while (kinds > 2)
//            {
//                map[fruits[left]]--;
//                if (map[fruits[left]] == 0)
//                    kinds--;
//                left++;
//            }
//            ret = max(ret, right - left + 1);
//        }
//        return ret;
//    }
//};

//class Solution {
//public:
//    vector<int> findAnagrams(string s, string p) {
//        int hash1[26] = { 0 };
//        int hash2[26] = { 0 };
//        for (char e : p) hash1[e - 'a']++;
//        int len = p.size();
//        vector<int> ret;
//        for (int left = 0, right = 0, count = 0; right < s.size(); right++)
//        {
//            char in = s[right];
//            if (++hash2[in - 'a'] <= hash1[in - 'a']) count++;
//
//            if (right - left + 1 > len)
//            {
//                char out = s[left++];
//                if (hash2[out - 'a']-- <= hash1[out - 'a']) count--;
//            }
//
//            if (len == count) ret.push_back(left);
//        }
//        return ret;
//    }
//};